# views.py: 路由 + 视图函数
from flask import Blueprint, request, render_template, jsonify, make_response, Response, redirect, url_for,session
import datetime
from .models import *

# 蓝图
blue = Blueprint('user', __name__)

@blue.route('/')
@blue.route('/home/')
def index():
    # 4. 获取 cookie
    # username = request.cookies.get('user')
    # 获取session
    username = session.get('user')

    return render_template('home.html', username=username)

@blue.route('/login/', methods=['GET', 'POST'])
def login():
    # GET 访问登录界面
    if request.method == 'GET':
        return render_template('login.html')
    # POST 实现登录请求
    elif request.method == 'POST':
        pass
        # 1. 获取前端提交过来的数据
        username = request.form.get('username')
        password = request.form.get('password')

        # 2. 模拟登录: 用户名 和 密码登录
        if username=='lisi' and password=='123':
            # 登录成功
            response = redirect('/home/')
            # 3. 设置 cookie
            # cookie 中不能写中文
            # 默认浏览器关闭 cookie失效
            # response.set_cookie('user','lisi')

            # 过期时间
            # max_age: 秒
            # expires: 指定的 datatime 日期
            # response.set_cookie('user',username, max_age=36000*24*7)
            # response.set_cookie('user', username, expires=datetime.datetime(2023,12,12))

            # 设置 session
            session['user'] = username
            # session 持续时间 永久
            session.permanent = True

            return response

@blue.route('/logout/')
def logout():
    response = redirect('/home/')

    # 5. 删除 cookie
    # response.delete_cookie('user')

    # 删除 session
    session.pop('user')
    # 清除服务器的所有 session
    # session.clear() # 慎用
    return response


# 请求 和 响应
# request: 请求
# response: 响应

# http 一次前后端交互: 先请求后响应

# Request: 客户端向服务端发送的请求
@blue.route('/request/', methods=['GET','POST'])
def get_request():
    pass
    # ImmutableMultiDict: 类字典对象
    # 区别： 可以出现重复的 key
    print(request.args)
    print(request.form)
    # cookies
    print(request.cookies)
    # 路径
    print(request.path)
    print(request.url)
    print(request.base_url)
    print(request.host_url)
    print(request.remote_addr) # 客户端 ip

    print(request.files)  # 文件内容
    print(request.headers)
    print(request.user_agent) # 用户代理，包括浏览器和操作系统信息

    # POST 请求的参数

    return 'request ok!'

# Response: 服务端向客户端发送的响应
@blue.route('/response/')
def get_response():
    pass
    # 响应的几种方式
    # 1. 返回字符串(不常用)
    # return 'response ok'

    # 2. 模板渲染 （前后端 不分离）
    # return render_template('index.html', name='张三', age=33)

    # 3. 返回 json 数据(前后端分离)
    # data = {
    #     'name': '李四',
    #     'age': 33
    # }
    # # return data
    # # jsonify() 序列化， 将字典 ==> 字符串
    # return jsonify(data)

    # 4. 自定义 Response 对象
    # html = render_template('index.html',
    #                          name='张三',
    #                          age=33)
    # # print(html, type(html)) # <class 'str'>
    # #
    # # res = make_response(html, 200)
    # res = Response(html)
    # return res

# Redirect: 重定向
@blue.route('/redirect/')
def make_redirect():
    pass
    # 重定向的几种方式
    # return redirect('http://www.qq.com')
    # return redirect('/request/')

    # 正向解析
        # 通过路由 找 函数
    # 反向解析
        # 通过函数 找 路由
    # url_for('蓝图名称.视图函数名')
    # ret = url_for('user.get_request')
    # return redirect(ret)

    # url_for() 传参
    # ret2 = url_for('user.get_request', name='王五', age=66)
    # return redirect(ret2)

#